// 抽象类：动物基类，
// 不可以创建对象，只能用来继承
abstract class Animal {
    name: string
    age: number

    // 构造器
    constructor(name: string, age: number) {
        this.name = name;
        this.age = age;
    }

    // 抽象方法，子类需要实现
    abstract say(): void
}


// Cat继承Animal类
class Cat extends Animal {

    // 扩展属性：类型
    type: number

    // 实现父类的抽象方法
    say(): void {
        console.log(this.name + "：喵喵喵");
    }

    // 扩展方法
    info(): void {
        console.log(this.name + "：" + this.type);
    }
}

let cat: Cat = new Cat('豹猫', 3)
cat.say()
cat.type = 1
cat.info()

// Dog继承Animal类
class Dog extends Animal {

    say(): void {
        console.log(this.name + "：汪汪汪");
    }

    run(): boolean {
        return true
    }

}

let xh: Dog = new Dog('小黑', 1)
xh.say()
console.log(xh.run());